﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace RunningString
{
    public partial class Form1 : Form
    {
        Form2 AboutDlg = null;
        string OrgText;
        string ModifiedText = " ";
        int i = 0;
        int a = 0;
        bool EoS = false;

        const int iLblWidthLimit = 100;
  
        int iMoveIter = 0;

        public Form1()
        {
            InitializeComponent();
            AboutDlg = new Form2();
            //чтобы пользователь не ввел текст длинее нашего отсекателя
            textBox.MaxLength = iLblWidthLimit; // ограничили длину ввода
        }

        private void button_Click(object sender, EventArgs e)
        {
            OrgText = textBox.Text;
           
            
            if (timer1.Enabled)
                timer1.Stop();
            else
                timer1.Start();
            ModifiedText = OrgText;
            a = OrgText.Length;
            i = OrgText.Length;
        }

        private void calculateTextWithMargin()
        {
          
            // текст всегда занимает в лабле фиксированную длину, остальное место занимает margin
            // нам нужно вычислить начальное смещение и конечное, относительно места среза текста
            // дальше, между срезами вставляем маржин

            // |ся------ва|
            // |ася------в|
            // |вася------|

            // вычисляем, если итераций меньше, чем iLblWidthLimit, то вычисляем насколько наш текст помещается лабель [iLblWidthLimit - OrgText]

            // создаем отступ из пробелов, равный количеству итераций, максимальное число которымх может быть равно отсекателю - iLblWidthLimit
            int iSLen = iMoveIter + OrgText.Length;
            
            // проверяем, если итерация ) ..  плюс текст больше длины лейбла, то возвращаем точку отсечения текста
            int iSplitPointPost = iSLen > iLblWidthLimit? iSLen - iLblWidthLimit : 0;


            string sTextMargin = new String(' ', iSplitPointPost > 0 ? iLblWidthLimit - OrgText.Length : iMoveIter);

            // формируем текст
            ModifiedText = OrgText.Substring(OrgText.Length - iSplitPointPost, iSplitPointPost) + sTextMargin + OrgText.Substring(0, OrgText.Length - iSplitPointPost);
            
            
    
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (iMoveIter > iLblWidthLimit)
              iMoveIter = 0;
            calculateTextWithMargin();
            label1.Text = ModifiedText;
            
            iMoveIter++;
            
            
            
            
            //if (ModifiedText.Length <= 175)
            //{
            //    label1.Text = "Out";
            //    ModifiedText = " " + ModifiedText;
            //    label.Text = ModifiedText;
            //    //    label1.Text = ModifiedText.Length.ToString();
            //}
            //else EoS = true;
            //label1.Text.Length
            //if (EoS)
            //{
            //    label1.Text = "inside";
            //    if (a > 0)
            //    {
            //        ModifiedText = "  " + ModifiedText.Remove(ModifiedText.Length - 1);
            //        label.Text = ModifiedText;
            //        a--;
            //    }
            //    else if (i > 0)
            //    {
            //        label1.Text = "double in";
            //        ModifiedText = OrgText[i - 1] + ModifiedText;
            //        label.Text = ModifiedText;
            //        i--;
            //    }
            //    else
            //    {
            //        EoS = false;
            //        ModifiedText = OrgText;
            //        a = OrgText.Length;
            //        i = OrgText.Length;
            //        //just for testing SVN
            //    }
            //}
        }

        private void abouToolStripMenuItem_Click(object sender, EventArgs e)
        {
            
            AboutDlg.Show();

        }
    }
}
